treeview: make sure separator nodes have a height > 0
authorChristoph Reiter <reiter.christoph@gmail.com>
Sun, 3 Mar 2019 09:38:18 +0000 (10:38 +0100)
committerChristoph Reiter <creiter@src.gnome.org>
Mon, 4 Mar 2019 16:07:13 +0000 (17:07 +0100)
In case the theme doesn't set a height/min-height for the treeview
separator the treeview drawing gets confused and draws rows on top of each
other depending on the redraw area.

This is due to gtk_tree_view_get_row_height() assuming that a node with a
height <= 0 is not set and not a separator and it will default to the
expander size.

Ideally gtk_tree_view_get_row_height() would know if it operates on a separator,
but there are too many calls/levels, so just make sure the separator height
is at least 1 (Adwaita already sets "min-height: 2px", so no change there)

Cherry-picked from !614 to master

gtk/gtktreeview.c

index e8191a9fefc9b5595a091c12348942e03fa63ebc..1a4ed0488a0eaea8b9e79d27938e4cd07633d5b9 100644 (file)
@@ -5614,6 +5614,8 @@ validate_row (GtkTreeView   *tree_view,
       if (is_separator)
         {
           height = separator_height;
+          /* gtk_tree_view_get_row_height() assumes separator nodes are > 0 */
+          height = MAX (height, 1);
         }
       else
         {